package com.bocloud.cmp.driver.providers;

import com.bocloud.cmp.model.OSMigrateModel;
import com.bocloud.cmp.model.ServerModel;
import com.bocloud.cmp.model.SnapshotModel;
import com.bocloud.common.model.BsmResult;

/**
 * 虚拟机操作接口
 * 
 * @author weiwei
 *
 */
public interface ServerDriver {

    public boolean accessable();

    /**
     * 虚拟机列表
     * 
     * @return
     */
    public BsmResult list();

    /**
     * 创建虚拟机
     * 
     * @param server
     * @return
     */
    public BsmResult create(ServerModel server);

    /**
     * 迁移虚拟机
     * 
     * @param server
     * @return
     */
    public BsmResult migrate(ServerModel server);

    public BsmResult OSMigrate(OSMigrateModel OSMigrate);

    /**
     * 创建快照
     * 
     * @param snapshotModel
     * @return
     */
    public BsmResult snapshot(SnapshotModel snapshotModel);

    /**
     * 更新虚拟机
     * 
     * @param server
     * @return
     */
    public BsmResult modify(ServerModel server);

    /**
     * 启动虚拟机
     * 
     * @param server
     * @return
     */
    public BsmResult start(String instanceId);

    /**
     * 停止虚拟机
     * 
     * @param server
     * @return
     */
    public BsmResult stop(String instanceId);

    /**
     * 重启虚拟机
     * 
     * @param server
     * @return
     */
    public BsmResult reboot(String instanceId);

    /**
     * 挂起虚拟机
     * 
     * @param instanceId
     * @return
     */
    public BsmResult suspend(String instanceId);

    /**
     * 删除虚拟机
     * 
     * @param server
     * @return
     */
    public BsmResult remove(String instanceId);

    /**
     * 详细虚拟机
     * 
     * @param server
     * @return
     */
    public BsmResult detail(String instanceId);

    /**
     * console接口
     * 
     * @param vncType
     * @return
     */
    public BsmResult VncConsole(String vncType, String serverId);

    public BsmResult joinSGroup(String instanceId, String groupId);

    public BsmResult leaveSGroup(String instanceId, String groupId);

    /**
     * 恢复
     * 
     * @param instanceId
     * @return
     */
    public BsmResult resume(String instanceId);

    /**
     * unpause
     * 
     * @param instanceId
     * @return
     */
    public BsmResult unpause(String instanceId);
}
